package com.itheima.controller;

import com.itheima.aspect.RecordLogAnno;
import com.itheima.log.LoggerUtil;
import com.itheima.pojo.Dept;
import com.itheima.pojo.Result;
import com.itheima.service.DeptService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController // 控制类
@RequestMapping({"/depts"})
//@Scope("prototype")
public class DeptController {
    // 获取业务层对象
    @Autowired
    private DeptService deptService;


    public DeptController(){
        System.out.println("DeptController constructor ....");
    }

    //就是你不会那个
    //就是你不会那个
    //就是你不会那个
    @GetMapping
    public Result queryDepartments() {
        List<Dept> depts = deptService.queryDepartments();

        /*
            当前类上存在注解@RestController
            @RestController注解中包含了@ResponseBody
            @ResponseBody的作用 : 把对象转成 json
         */
        return Result.success(depts);
    }


    @DeleteMapping
    public Result deleteDeptById(Integer id) {
        deptService.deleteDeptById(id);
        return Result.success();
    }


    /*
        前端传递的是数据类型是 json 类型
        后端需要使用实体类对象接收, 实体类中必须包含 json 中存在的键
        注意 : 后端方法的形参必须使用注解@RequestBody修饰
     */

    @PostMapping
    public Result insertDept(@RequestBody Dept dept) {
        deptService.insertDept(dept);
        return Result.success();
    }

    /*
        根据 id 查询部门数据 : 数据回显操作
        前端传递的是一个路径参数
        前端传递 : /depts/100
        后端接收 : /depts/{id}
        方法的形参名必须和大括号中的变量保持一致 , 形参需要加上注解@PathVariable
     */
    @GetMapping("/{id}")
    public Result getDeptById(@PathVariable Integer id) {
        Dept dept = deptService.getDeptById(id);
        return Result.success(dept);
    }

    @PutMapping
    public Result updateDept(@RequestBody Dept dept) {
        deptService.updateDept(dept);
        return Result.success();
    }
}
